package py.fpuna.ii.electiva2.eao;

import java.util.ArrayList;
import java.util.Iterator;
import py.fpuna.ii.electiva2.interfaces.VentaEAO;
import py.fpuna.ii.electiva2.interfaces.VentaEAORemote;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import py.fpuna.ii.electiva2.dto.ClienteDTO;
import py.fpuna.ii.electiva2.dto.ProductoDTO;
import py.fpuna.ii.electiva2.entity.Venta;
import py.fpuna.ii.electiva2.dto.VentaDTO;
import py.fpuna.ii.electiva2.entity.Cliente;
import py.fpuna.ii.electiva2.entity.Producto;

/**
 *
 * @author lizg
 */
@Stateless
public class VentaEAOBean implements VentaEAO, VentaEAORemote {
    @PersistenceContext
    private EntityManager em;

    public String create(VentaDTO venta) {
        Venta entidad = null;
        String retorno = null;

        try{
            entidad = new Venta();
            entidad.setVentCantidad(venta.getVentCantidad());
            entidad.setVentCliente( (new Cliente(venta.getVentCliente().getClieCodigo())) );
            entidad.setVentCodigo(venta.getVentCodigo());
            entidad.setVentProducto( (new Producto(venta.getVentProducto().getProdCodigo())) );

            em.persist(entidad);
            em.flush();
            retorno = "OK";
        }
        catch (Exception e){
            e.printStackTrace();
            retorno = e.getMessage();
	}

	return retorno;
       
    }

    public VentaDTO find(Object id) {
        VentaDTO retorno = null;
        Venta entidad = new Venta();
        try {
            Query q = em.createNamedQuery("Venta.findByVentCodigo").setParameter("ventCodigo", id);
            entidad = (Venta)q.getSingleResult();

            ClienteDTO cl = new ClienteDTO();
            cl.setClieCodigo(entidad.getVentCliente().getClieCodigo());

            ProductoDTO pr = new ProductoDTO();
            pr.setProdCodigo(entidad.getVentProducto().getProdCodigo());

            retorno = new VentaDTO(entidad.getVentCodigo(),
                    cl,
                    pr,
                    entidad.getVentCantidad()
            );
        } catch (Exception e) {
            throw e;
        }finally{
            return retorno;
        }
    }

    public List<VentaDTO> findAll() {
       
        List<Venta> ventList = em.createQuery("select object(o) from Venta as o").getResultList();

        List<VentaDTO> ventDtoList = new ArrayList<VentaDTO>();

        Iterator <Venta> itVenta = ventList.iterator();

        while(itVenta.hasNext()){
            Venta vent = itVenta.next();
            VentaDTO ventDdto = new VentaDTO();

            ClienteDTO clientDTO = new ClienteDTO();
            clientDTO.setClieCodigo(vent.getVentCliente().getClieCodigo());
            clientDTO.setClieNombre(vent.getVentCliente().getClieNombre());
            clientDTO.setClieApellido(vent.getVentCliente().getClieApellido());
            clientDTO.setClieCi(vent.getVentCliente().getClieCi());
            clientDTO.setClieDireccion(vent.getVentCliente().getClieDireccion());
            clientDTO.setClieRuc(vent.getVentCliente().getClieRuc());
            ventDdto.setVentCliente(clientDTO);

            ProductoDTO proDTO = new ProductoDTO();
            proDTO.setProdCodigo(vent.getVentProducto().getProdCodigo());
            proDTO.setProdCantidad(vent.getVentProducto().getProdCantidad());
            proDTO.setProdDescripcion(vent.getVentProducto().getProdDescripcion());
            proDTO.setProdPrecioCompra(vent.getVentProducto().getProdPrecioCompra());
            proDTO.setProdPrecioVenta(vent.getVentProducto().getProdPrecioVenta());
            ventDdto.setVentProducto(proDTO);
            ventDdto.setVentCantidad(vent.getVentCantidad());
            

            ventDtoList.add(ventDdto);
        }

        return ventDtoList;
    }

    public void edit(VentaDTO venta) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void remove(VentaDTO venta) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public String create(VentaDTO venta, Producto prod, Cliente cli) {
        Venta entidad = null;
        String retorno = null;

        try{
            entidad = new Venta();
            entidad.setVentCodigo(venta.getVentCodigo());
            entidad.setVentCantidad(venta.getVentCantidad());

            entidad.setVentCliente(cli);
            entidad.setVentProducto(prod);

            em.persist(entidad);

            retorno = "OK";
        }
        catch (Exception e){
            e.printStackTrace();
            retorno = e.getMessage();
	}

	return retorno;
    }



}
